<?php

/**
 * UsuarioController
 * 
 * @author Voitech
 * @version 1.0
 */
class UsuarioController extends Zend_Controller_Action {
	public function init(){
            parent::init();
            $this->view->tituloPagina = "Controle de Usuário";
        }
	/**
	 * The default action - show the home page
	 */
	public function indexAction() {
            $form = new App_Form_Pesquisa();
            $form->montaTipoBusca(array('no_usuario'=>'Nome','co_pessoa'=>'Cód. Usuario'));
            $form->setSituacao();
            $form->setAction('javascript:;');
            $form->show();
            $this->view->form = $form;
	}
	
	/**
	 * Metodo que lista os Usuarioes
	 * 
	 * @access 	public
	 * @param 	co_pessoa
	 * @param 	no_usuario
	 * @param 	ds_senha
	 * @param 	st_ativo
	 * @return 	zend_paginator
	 */
	public function listarAction(){
            $this->_helper->layout->disableLayout();			
            try {
                if ($this->getRequest()->isPost()) {				  
                    $arrParam = array($this->_getParam('tipo_busca') => $this->_getParam('palavra_chave')
                                     ,'st_ativo'=>$this->_getParam('st_ativo'));
                    $obRepository = new App_Model_UsuarioRepository();                            
                    $paginator = new Voitech_Paginator($obRepository->listarTodos($arrParam),$this->_getParam( 'list' ),$this->_getParam('page'));		       					    	
                    $this->view->paginator	= $paginator->paginar(10);
                    $this->view->div_id 	= 'div_listar_usuario';
                    $this->view->dataType 	= "post";
                    $this->view->frmName	= "frmPesquisar";       
                }			
            }catch (Voitech_ExceptionValidate $e) {
                echo $this->_helper->json(array('resultado'=>ERRO_VALIDACAO,'retorno'=>'Favor preencher corretamente os dados obrigatórios'));
            }catch (Voitech_Exception $e) {
                echo $this->_helper->json(array('resultado'=>ERRO,'retorno'=>$e->getMessage()));
            }catch (Exception $e) {
                Voitech_Log::gerarLog($e->getMessage());
                echo $this->_helper->json(array('resultado'=>ERROR_GERAL,'retorno'=>$e->getMessage()));
            }			
	}
	
	/**
	 * Metodo que monta o formulario de Usuario
	 * 
	 * @param 	id
	 * @return 	zend_form
	 */
	public function cadastroAction() {
            $this->_helper->layout->disableLayout();
            $form = new App_Form_Usuario();
            $form->setAction('javascript:;');
            if( $this->_getParam('id') != '')
            {
                $where = App_Model_Db_Usuario::build()->getAdapter()->quoteInto('co_pessoa = ?', $this->_getParam('id'));			
                $obUsuario = App_Model_Db_Usuario::build()->fetchRow($where);
                if( !empty($obUsuario) )
                {
                    $form->populate($obUsuario->toArray());	
                }			
            }
            $this->view->form = $form;
	}
	
	/**
	 * Metodo que salva o Usuario
	 * 
	 * @param 	co_Usuario
	 * @param 	no_Usuario
	 * @param 	nu_cnpj
	 * @param 	nu_inscricao
	 * @return 	json (resultado,retorno)
	 */
	public function salvarCadastroAction(){
            $this->_helper->layout->disableLayout();
            $this->_helper->viewRenderer->setNoRender();
            $form = new App_Form_Usuario();		
            try {
                App_Model_Db_Usuario::build()->getAdapter()->beginTransaction();

                if(!$form->isValid($this->_getAllParams()))
                {
                    throw new Voitech_ExceptionValidate('erro_validacao');				
                }				
                $obUsuario = new App_Model_Usuario();
                $obUsuario->setCoPessoa($this->_getParam('co_pessoa'));
                $obUsuario->setNoUsuario($this->_getParam('no_usuario'));
                $obUsuario->setDsSenha($this->_getParam('ds_senha'));

                $obUsuario->setObUsuarioCadastro(new App_Model_Usuario($this->view->user->getCoPessoa()));

                $obUsuarioRepository = new App_Model_UsuarioRepository();
                $obUsuarioRepository->salvar($obUsuario);
                App_Model_Db_Usuario::build()->getAdapter()->commit();
                echo $this->_helper->json(array('resultado'=>OK,'retorno'=>'Registro salvo com sucesso!.'));							
            }catch (Voitech_ExceptionValidate $e) {
                App_Model_Db_Usuario::build()->getAdapter()->rollBack();
                echo $this->_helper->json(array('resultado'=>ERRO_VALIDACAO,'retorno'=>'Favor verificar os dados obrigatórios'));
            }catch (Voitech_Exception $e) {
                App_Model_Db_Usuario::build()->getAdapter()->rollBack();
                echo $this->_helper->json(array('resultado'=>ERRO,'retorno'=>$e->getMessage()));
            }catch (Exception $e) {
                App_Model_Db_Usuario::build()->getAdapter()->rollBack();
                Voitech_Log::gerarLog($e->getMessage());
                echo $this->_helper->json(array('resultado'=>ERROR_GERAL,'retorno'=>'Erro na operação.'));
            }		
	}
	
	/**
	 * Metodo que altera o status do Usuario
	 * 
	 * @param 	co_Usuario
	 * @param 	st_ativo
	 * @return 	json resultado,retorno
	 */
	public function alterarStatusAction() {
            $this->_helper->layout->disableLayout();
            $this->_helper->viewRenderer->setNoRender();
            try {
                App_Model_Db_Usuario::build()->getAdapter()->beginTransaction();                        
                $obUsuarioRepository = new App_Model_UsuarioRepository();                        
                if( $this->_getParam("st_ativo") == "S") {
                    $obUsuarioRepository->ativar(new App_Model_Usuario($this->_getParam('co_usuario')));
                }
                else
                {
                    $obUsuarioRepository->desativar(new App_Model_Usuario($this->_getParam('co_usuario')));
                }
                App_Model_Db_Usuario::build()->getAdapter()->commit();
                echo $this->_helper->json(array('resultado'=>OK,'retorno'=>'Registro alterado com sucesso!.'));				

            }catch (Voitech_ExceptionValidate $e) {
                App_Model_Db_Usuario::build()->getAdapter()->rollBack();
                echo $this->_helper->json(array('resultado'=>ERRO_VALIDACAO,'retorno'=>'Favor preencher corretamente os dados obrigatórios'));
            }catch (Voitech_Exception $e) {
                App_Model_Db_Usuario::build()->getAdapter()->rollBack();
                echo $this->_helper->json(array('resultado'=>ERRO,'retorno'=>$e->getMessage()));
            }catch (Exception $e) {
                App_Model_Db_Usuario::build()->getAdapter()->rollBack();
                Voitech_Log::gerarLog($e->getMessage());
                echo $this->_helper->json(array('resultado'=>ERROR_GERAL,'retorno'=>$e->getMessage()));
            }		
	}
        
        /**
         * Buscar dados do Usuario por id
         * 
         * @param   co_Usuario
         * @return  json
         */
        public function buscarUsuarioJsonAction(){
            $this->_helper->layout->disableLayout();
            $this->_helper->viewRenderer->setNoRender();
            try{
                $obUsuario = new App_Model_Usuario();
                $obUsuario->setCoUsuario($this->_getParam('id'));
                $obUsuarioMapper = new App_Model_UsuarioMapper($obUsuario);
                $obUsuarioMapper->buscarPorId();
                echo $this->_helper->json(array('resultado'=>OK,'retorno'=>array('usuario'=>$obUsuarioMapper->retornarArrayPopulado())));
            }catch (Voitech_Exception $e) {
                echo $this->_helper->json(array('resultado'=>ERRO,'retorno'=>$e->getMessage()));
            }catch (Exception $e) {
                Voitech_Log::gerarLog($e->getMessage());
                echo $this->_helper->json(array('resultado'=>ERROR_GERAL,'retorno'=>'Ops, ocorreu um erro'));
            }
        }
        
        /**
         * Metodo que lista os Usuarioes ativos e retorna json
         * 
         * @return json
         */
        public function listarUsuarioAtivoJsonAction(){
            $this->_helper->layout->disableLayout();
            $this->_helper->viewRenderer->setNoRender();
            try{
                $obUsuarioRepository = new App_Model_UsuarioRepository();
                $arObUsuario = $obUsuarioRepository->listarTodos(array('st_ativo'=>'S'));
                echo $this->_helper->json(array('resultado'=>OK,'retorno'=>Voitech_Util::converteModeloArrayCombo($arObUsuario, 'CoUsuario', "NoUsuario",1)));
            }catch(Voitech_Exception $e){
                echo $this->_helper->json(array('resultado'=>ERRO,'retorno'=>$e->getMessage()));
            }catch(Exception $e){
                Voitech_Log::gerarLog($e->getMessage());
                echo $this->_helper->json(array('resultado'=>ERRO,'retorno'=>ERROR_GERAL));
            }        
        }

	/**
	 * Metodo apaga registro de Usuario
	 * 
	 * @param 	co_Usuario
	 * @return 	json resultado,retorno
	 */
	public function excluirAction() {
            $this->_helper->layout->disableLayout();
            $this->_helper->viewRenderer->setNoRender();
            try {
                App_Model_Db_Usuario::build()->getAdapter()->beginTransaction();                        
                $obUsuarioRepository = new App_Model_UsuarioRepository();                        

                $obUsuarioRepository->excluir(new App_Model_Usuario($this->_getParam('co_usuario')));
                
                App_Model_Db_Usuario::build()->getAdapter()->commit();
                echo $this->_helper->json(array('resultado'=>OK,'retorno'=>'Registro excluido com sucesso!.'));				

            }catch (Voitech_ExceptionValidate $e) {
                App_Model_Db_Usuario::build()->getAdapter()->rollBack();
                echo $this->_helper->json(array('resultado'=>ERRO_VALIDACAO,'retorno'=>$form->getErrors()));
            }catch (Voitech_Exception $e) {
                App_Model_Db_Usuario::build()->getAdapter()->rollBack();
                echo $this->_helper->json(array('resultado'=>ERRO,'retorno'=>$e->getMessage()));
            }catch (Exception $e) {
                App_Model_Db_Usuario::build()->getAdapter()->rollBack();
                Voitech_Log::gerarLog($e->getMessage());
                echo $this->_helper->json(array('resultado'=>ERROR_GERAL,'retorno'=>$e->getMessage()));
            }		
	}        
        
        
}

